【AWSセキュリティ】簡易侵入検知のススメ
よく訓練されたアップル信者、都元です。ブログのエントリみてればわかるとおもいますが、最近AWSのセキュリティに凝ってます。
AWSにおける権限管理について知識を深め、各所に適切な設定を行って行くのは大事なことです。これが基本です。しかし、自分が管理するAWSの各種リソースについて、何らかの意図しない変更があったことにすぐ気付ける体制は整っていますでしょうか?
仮に、アクセスキーが悪意のある第三者に漏洩し、当人がその事実に気づいていないケースを考えます。悪意の第三者は、きたる攻撃のタイミングに備え、各所にバックドアを仕込もうとするでしょう。
- こっそりとIAMユーザを増やしているかもしれません。
- アクセスキーが1ユーザにつき2つ作れることをいいことに、自分用のキーを追加で作成しているかもしれません。
- IAMロールに対するIAMポリシーを書き換えているかもしれません。
- セキュリティグループにおける許可IPアドレスを追加しているかもしれません。
- ...
このような悪意の第三者の動きに気付けるでしょうか? 正直、目視による監査では「悪意の第三者がセキュリティグループにSSH接続許可するIPアドレスを1つ追加した」という事実に気づくのは困難ではないでしょうか。毎日見回りするわけにいきませんから…。
監査スクリプト SecConfig.py
人力で出来ないのであればスクリプト化すればいいのです。ということで、そんなスクリプトを見つけました。これはPythonで書かれた監査スクリプトです。なので、botoは必須ですのでpip等で導入しておいてください。
https://s3.amazonaws.com/reinvent2013-sec402/SecConfig.py
ヘルプはこんな感じ。
$ SecConfig.py -h usage: SecConfig.py [-h] -a ACCESS_KEY_ID -k SECRET_ACCESS_KEY [-t SECURITY_TOKEN] [-r ROLE] [-v] [-d] outputs security configuration of an AWS account optional arguments: -h, --help show this help message and exit -a ACCESS_KEY_ID, --access_key_id ACCESS_KEY_ID access key id -k SECRET_ACCESS_KEY, --secret_access_key SECRET_ACCESS_KEY secret access key -t SECURITY_TOKEN, --security_token SECURITY_TOKEN security token (for use with temporary security credentials) -r ROLE, --role ROLE role to assume -v, --verbose enable verbose mode -d, --debug enable debug mode
監査担当者のアクセスキーとシークレットキーを引数で与えればOK *1ですね。
このコマンドを実行してみると、下記のような出力が得られます。
iam:accountsummary, AccountMFAEnabled, , 1 iam:accesskey, ****username****, Active, AKIA**************** iam:useringroup, ****username****, , ****groupname**** iam:grouppolicy, ****groupname****, ***Access-cm-*******-201307031726, 08504c15956913f7a75aadc895ef2b92368826916f95027a128388e60cda61d4 iam:assumerolepolicy, ec2-poweruser, arn:aws:iam::************:role/ec2-poweruser, 06bbf2017fd2552ff3c11b4215b4e1eda06051f1384efd7511efbcc9538dac49 iam:rolepolicy, ec2-poweruser, PowerUserAccess-ec2-poweruser-201401092236, e3e0211e865b5cac2a57241edcb8aeb9d546764abba2f325b694ec840985c2ff s3:bucketpolicy, base-logbucket-************, , 8f561c7ea33a084ba8f19e147613406ba88fd88b0316401498b1669eae2a821b s3:bucketpolicy, cloudtrail-ap-northeast-1-************, , b5b8d799e60d8b84e606b6f16decc66fb144e17e030cadd40c9fdef41d16db00 ec2:security_group, default, IPPermissions:icmp(-1--1), default-************ ec2:security_group, default, IPPermissions:tcp(0-65535), default-************ ec2:security_group, default, IPPermissions:udp(0-65535), default-************
このように、意図せぬ変更があったら気づく必要がある項目について、テキスト形式で情報を出力してくれます。このコマンドを定期的に実行し、前回の実行結果とのdiffを確認するだけで、確認すべきポイントを洗い出すことができます。
このスクリプトで、侵入検知を定期的に行うことをお勧めします。
脚注
- クレデンシャルがシェルのhistoryに残る点には充分注意してください。 ↩